home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / utils / tlayr10 / spr2til.c < prev    next >
C/C++ Source or Header  |  1995-04-19  |  3KB  |  132 lines

  1. /*
  2.  * (c) 1995 NikSoft International
  3.  *
  4.  * SPR2TIL: Converte un file in formato .SPR in .TIL
  5.  *
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <io.h>
  11. #include <fcntl.h>
  12. #include <string.h>
  13. #include <sys\stat.h>
  14.  
  15. #define IF_NEEDED        0
  16. #define ADD_EXT          1
  17.  
  18. extern unsigned _stklen= 1024;
  19. extern unsigned _heaplen= 4096;
  20.  
  21. struct TIL_header {
  22.  
  23.                    char sign[16];
  24.                    unsigned version;
  25.                    unsigned char tile_x, tile_y;
  26.  
  27.                   } Header= {"TILE FILE", 0x0100, 16, 16};
  28.  
  29. char source_filename[90];
  30. char dest_filename[90];
  31.  
  32. char source_default_suffix[]= ".SPR";
  33. char dest_default_suffix[]=".TIL";
  34.  
  35. char *add_suffix(char *dest, char *suffix, unsigned mode)
  36. {
  37.  char *index;
  38.  
  39.  if ( !( index= strrchr(dest, '.') ) )
  40.     return strcat(dest, suffix);
  41.  
  42.  if (mode)
  43.     {
  44.      *index= 0;
  45.      return strcat(dest, suffix);
  46.     };
  47.  
  48.  return dest;
  49. }
  50.  
  51. int open_file(char *filename, unsigned mode)
  52. {
  53.  register int fhandle;
  54.  
  55.  if ( mode & O_CREAT)
  56.     {
  57.      fhandle= creat(filename, S_IREAD | S_IWRITE);
  58.     }
  59.  else fhandle= open(filename, mode);
  60.  
  61.  if ( fhandle == -1 )
  62.     printf("Can't open: %s\nError: %s", filename, strerror(errno));
  63.  else setmode(fhandle, O_BINARY);
  64.  
  65.  return fhandle;
  66. }
  67.  
  68. int main(unsigned argc, char *argv[])
  69. {
  70.  register int dest_handle, source_handle;
  71.  unsigned bytes2copy, bytes_converted= 0;
  72.  unsigned char *RW_Buffer;
  73.  
  74.  puts("SPR to TIL Converter Utility by gaggi@cs.unibo.it ");
  75.  
  76.  switch ( argc )
  77.  {
  78.   case 1:
  79.      puts("Usage:\n  spr2til <source file[.SPR]> [ <target file[.TIL]> ]");
  80.      return 0;
  81.  
  82.   case 2:
  83.      strcpy(source_filename, argv[1]);
  84.      strcpy(dest_filename, argv[1]);
  85.      break;
  86.  
  87.   case 3:
  88.      strcpy(source_filename, argv[1]);
  89.      strcpy(dest_filename, argv[2]);
  90.  };
  91.  
  92.  add_suffix(source_filename, source_default_suffix, IF_NEEDED);
  93.  add_suffix(dest_filename, dest_default_suffix,
  94.             ( strcmp(source_filename, dest_filename)? IF_NEEDED : ADD_EXT) );
  95.  
  96.  if ( (source_handle= open_file(source_filename, O_RDONLY)) == -1 )
  97.     return -1;
  98.  
  99.  if ( (dest_handle= open_file(dest_filename, O_CREAT)) == -1 )
  100.     return -1;
  101.  
  102.  read(source_handle, &Header.tile_x, 2*sizeof(unsigned char) );
  103.  write(dest_handle, &Header, sizeof(struct TIL_header) );
  104.  
  105.  bytes2copy= Header.tile_x * Header.tile_y;
  106.  
  107.  if ( !(RW_Buffer= (unsigned char *)malloc(bytes2copy)) )
  108.     {
  109.      puts("Shortage of memory ... aborting");
  110.  
  111.      close(dest_handle);
  112.      close(source_handle);
  113.  
  114.      printf("Unlinking %s\n", dest_filename);
  115.      unlink(dest_filename);
  116.      return -1;
  117.     };
  118.  
  119.  while ( read(source_handle, RW_Buffer, bytes2copy) == bytes2copy )
  120.  {
  121.   bytes_converted += write(dest_handle, RW_Buffer, bytes2copy);
  122.   lseek(source_handle, 2*sizeof(unsigned char), SEEK_CUR);
  123.  };
  124.  
  125.  free(RW_Buffer);
  126.  close(source_handle);
  127.  close(dest_handle);
  128.  printf("%s converted into %s\n%05u bytes converted\n", source_filename,
  129.         dest_filename, bytes_converted);
  130.  
  131.  return 0;
  132. }